#coding:utf8

"""

#合并：
# cookie --> redis

# 考虑id:         如果cookie中有的id，redis中 没有 ，则添加到redis中
# 考虑id:         如果cookie中没有id，redis中也有 ，则 redis不变

# 考虑id:         如果cookie中有的id，redis中也有 ，则

# count          cookie也有，redis也有：
        有三种情况： 以Redis为准，以Cookie为准，以累加为准
        怎么选都可以。 我们选择以 COOKIE为准

#1.获取cookie数据
cookie:  {1:{count:5,selected:True},3:{count:10:selected:False}}


#2. 获取redis数据
redis:
        hash:       {2:100,3:50}
        set         [2,3]

#3. 合并
# 最终的结果
# hash: {1:5,2:100,3:10}
# set   [1,2,3]


#4.把最终的结果 添加到redis中

#5.合并成功之后，删除cookie数据

"""
import base64
import pickle
from django_redis import get_redis_connection

def merge_cookie_to_redis(request,user,response):
    """
    # 1.获取cookie数据
    # 2.获取redis数据
    # 3.合并
    # 4.把最终的结果 添加到redis中
    # 5.合并成功之后，删除cookie数据

    """
    # 1.获取cookie数据
    cookie_str = request.COOKIES.get('cart')
    if cookie_str is not None:
        #有cookie进行合并
        cookie_cart = pickle.loads(base64.b64decode(cookie_str))
        # {1:{count:xx,selected:xxx}}

        # 2.获取redis数据
        redis_conn = get_redis_connection('cart')

        #hash
        # request.user ???
        # {b'sku_id':b'count'}
        redis_sku_id_count = redis_conn.hgetall('cart_%s'%user.id)
        #set
        redis_selected_ids = redis_conn.smembers('cart_selected_%s'%user.id)

        #转换一个 redis_sku_id_count的数据类型
        new_redis_data = {}

        for sku_id,count in redis_sku_id_count.items():
            new_redis_data[int(sku_id)] = int(count)

        new_redis_selected_ids = []
        for sku_id in redis_selected_ids:
            new_redis_selected_ids.append(sku_id)


        # 3.合并 要把 cookie数据 合并到 redis数据中
        # 我们需要对cookie数据进行遍历
        #{1:{count:xx,selected:xxx}}
        for sku_id,count_selected_dict in cookie_cart.items():

            # # 判断 sku_id 是否在 new_redis_data 中
            # if sku_id in new_redis_data:
            #     #id存在，个数以 cookie为准
            #     new_redis_data[sku_id] = count_selected_dict['count']
            #
            # else:
            #     # id不存在，添加id并且要添加个数
            #     new_redis_data[sku_id] = count_selected_dict['count']

            new_redis_data[sku_id] = count_selected_dict['count']

            #如果选中了，则将 sku_id 添加到列表中
            if count_selected_dict['selected']:
                new_redis_selected_ids.append(sku_id)



        # 4.把最终的结果 添加到redis中
        # new_redis_data,
        # redis_selected_ids

        # new_redis_data --> {sku_id:count}
        #
        redis_conn.hmset('cart_%s'%user.id,new_redis_data)

        # new_redis_selected_ids --> [1,2,3]
        redis_conn.sadd('cart_selected_%s'%user.id,*new_redis_selected_ids)

        # 5.合并成功之后，删除cookie数据
        response.delete_cookie('cart')

        return response
    else:
        #没有cookie
        return response


